package com.jdpc.weparty

import com.jdpc.weparty.entity.Activity
import com.jdpc.weparty.entity.ActivityType
import com.jdpc.weparty.reposity.ActivityRepository
import com.jdpc.weparty.repository.SignUpActivityRepository
import com.jdpc.weparty.reposity.UserRepository
import com.jdpc.weparty.service.activity.ActivityInfo
import com.jdpc.weparty.service.activity.ActivityService
import com.jdpc.weparty.service.activity.signup.SignUpActivityService
import com.jdpc.weparty.service.user.UserInfo
import com.jdpc.weparty.service.user.UserService
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import java.util.*

/**
 * 生成随机码
 * @param pwd_len 生成的密码的总长度
 * @return  密码的字符串
 */
fun genRandomNum(pwd_len: Int): String { //35是因为数组是从0开始的，26个字母+10个数字
    val maxNum = 36
    var i: Int //生成的随机数
    var count = 0 //生成的密码的长度
    val str = charArrayOf('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
            'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
            'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    val pwd = StringBuffer("")
    val r = Random()
    while (count < pwd_len) { //生成随机数，取绝对值，防止生成负数，
        i = Math.abs(r.nextInt(maxNum)) //生成的数最大为36-1
        if (i >= 0 && i < str.size) {
            pwd.append(str[i])
            count++
        }
    }
    return pwd.toString()
}

@SpringBootTest
class WepartyApplicationTests {
    @Autowired
    lateinit var userRepository: UserRepository

    @Autowired
    lateinit var activityRepository: ActivityRepository

    @Autowired
    lateinit var signUpActivityRepository: SignUpActivityRepository

    @Autowired
    lateinit var signUpActivityService: SignUpActivityService

    @Autowired
    lateinit var activityService: ActivityService

    @Autowired
    lateinit var userService: UserService

    @Test
    fun contextLoads() {
        //添加两个用户
//        userService.register(UserInfo(
//                "185xxxxxxxxx",
//                "ap",
//                "male",
//                15,
//                "3018216xxx",
//                "xxx.png",
//                "password"
//        ))
//        userService.register(UserInfo(
//                "185xxxxxxxxx",
//                "aj",
//                "male",
//                15,
//                "3018216xxx",
//                "xxx.png",
//                "password"
//        ))
//        userService.register(UserInfo(
//                "phone",
//                "userName",
//                "male",
//                15,
//                "userNumber",
//                "xxx.png",
//                "password"
//        ))
//        activityService.publishActivity(ActivityInfo(
//                "activityName",
//                "活动简介",
//                1000,
//                1200,
//                ActivityType.READING,
//                "55教",
//                "test"
//
//        ), userService.getUser(1)!!, userService.getUser(2)!!)
//        activityService.publishActivity(ActivityInfo(
//                "activityName2",
//                "活动简介2",
//                1200,
//                1500,
//                ActivityType.PLAY,
//                "45教",
//                "test"
//        ), userService.getUser(1)!!, userService.getUser(2)!!)
//        activityService.publishActivity(ActivityInfo(
//                "activityName3",
//                "活动简介3",
//                1200,
//                1500,
//                ActivityType.STUDY,
//                "45教",
//                "test"
//        ), userService.getUser(1)!!, userService.getUser(3)!!)
//        signUpActivityService.signUp(1, 1)
//        signUpActivityService.signUp(1, 2)
//        signUpActivityService.signUp(1, 3)
//        signUpActivityService.signUp(2, 1)
//        signUpActivityService.signUp(3, 1)
//        signUpActivityService.pass(1, 1, true)
//        signUpActivityService.pass(1, 2, false)

//		批量添加活动
//        val u1 = userRepository.findById(1).get()
//        val u2 = userRepository.findById(2).get()
//		repeat(100){
//			val a = Activity()
//					.apply {
//						activityId = genRandomNum(10)
//						activityName = genRandomNum(5)
//						activityProfile = genRandomNum(8)
//						activityType = ActivityType.READING
//						endTime = 644
//						startTime = 233
//						publisher = u1
//						examiner = u2
//					}
//			activityRepository.save(a)
//		}

//		添加活动
		val a = Activity()
				.apply {
					activityCode = genRandomNum(10)
					activityName = genRandomNum(5)
					activityProfile = genRandomNum(8)
					activityType = ActivityType.READING
					endTime = 644
					startTime = 233
					publisher = userRepository.findById(1).get()
					examiner = userRepository.findById(1).get()
				}
		activityRepository.save(a)


//		val user = rep.findById(1)
//		if(user.isPresent){
//			val u = user.get()
//			u.examinedActivities.forEach {
//				println(it.toString())
//			}
//			u.publishedActivities.forEach {
//				println(it.toString())
//			}
//
////			rep.updateUserInfoById("weqw","qweq","qweq","qe","qe","4844","1")
//		var a1 = activityRepository.findByActivityId("#weqqe]E#")
//		System.err.println(a1)

//		var a2: List<Activity> = activityRepository.findByActivityType(ActivityType.OTHERS)
//		System.err.println(a2)
//
//		var a3: Page<Activity> = activityRepository.findByActivityType(ActivityType.READING, PageRequest.of(0,10))
//		System.err.println(a3.content)

//		var a1 = activityRepository.findById(10).get()
//		a1.checked = true
//		activityRepository.save(a1)
//
//		var a2 = activityRepository.findById(45).get()
//		a2.checked = false
//		activityRepository.save(a2)
//
//		var a5 = activityRepository.findById(1).get()
//		a5.checked = null
//		activityRepository.save(a5)
//
//		var u1 = userRepository.findById(1).get()
//		var a3 = activityRepository.findByExaminerAndCheckedIsNull(u1)
//		System.err.println(a3)
//
//		var a4 = activityRepository.findByExaminerAndCheckedIsNull(u1,PageRequest.of(0,10))
//		System.err.println(a4.content)

//		var a = activityRepository.findById(5).get()
//		var u = userRepository.findByPublishedActivities(a)
//		System.err.println(u)

//		for (i in 1..50){
//			var a = activityRepository.findById(i).get()
//			a.checked = true
//			a.examiner = userRepository.findById(1).get()
//			a.publisher = userRepository.findById(3).get()
//			a.activityType = ActivityType.OTHERS
//			activityRepository.save(a)
//		}
//		for (i in 51..101){
//			var a = activityRepository.findById(i).get()
//			a.checked = false
//			a.examiner = userRepository.findById(2).get()
//			a.publisher = userRepository.findById(4).get()
//			a.activityType = ActivityType.SPORTS
//			activityRepository.save(a)
//		}

        //测试活动参与者进行活动申请

        //申请
//		var u_acc = userRepository.findById(3).get()
//		var a = activityRepository.findById(4).get()
//
//		var s = SignUpActivity().apply {
//			this.activityId = a.id
//			this.userId = u_acc.id
//		}
//
//		var ss = signUpActivityRepository.findByActivityId(a.id)
//		System.err.println(ss)
//
//		//审核申请
//		var p = userRepository.findByPublishedActivities(a)


    }

}
